package cn.edu.lcu.cs.javateaching.oop;

/**
 * 反面教材！反面教材！反面教材！
 * 
 */
// 类名首字母应该大写
public abstract class shape {
	abstract void perimeter();
}

// 单个源文件应该只有一个Public类，如无必要，不要在一个源文件中包含多个类
// 必要的内部类可以除外
// 本例应该将Circle剥离为独立的Public类
class Circle extends shape {
	private int radius;

	Circle(int radius) {
		this.radius = radius;
	}

	// 此方法应该有返回值
	public void perimeter() {
		double ci = radius * 2 * 3.14;
		System.out.println("圆的周长是：" + ci);
	}

}

class Rectangle extends shape {
	private int length;
	private int width;

	Rectangle(int length, int width) {
		this.length = length;
		this.width = width;
	}

	public void perimeter() {
		int le = 2 * (width + length);
		System.out.println("长方形的周长是：" + le);
	}

	// 测试类尽量与被测试类分开到不同的源文件
	// 本测试类的位置不合适，不应该是某个类的内部类
	// 造成这种现象的可能原因：
	// 1、对类的嵌套不了解
	// 2、代码没有正确缩进，搞错了类的层次
	class TestShape {

		/**
		 * 此方法应该是静态的<br>
		 * 即使是静态的，因为它是内部类中的main方法，也不会作为主方法被执行
		 * 
		 * @param args
		 */
		public void main(String[] args) {
			shape sa1 = new Circle(2);
			shape sa2 = new Rectangle(3, 4);
			sa1.perimeter();
			sa2.perimeter();
			System.out.println();

		}
	}
}
